package com.atguigu.dynamic.aspect;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

import javax.sql.DataSource;
import java.util.Map;

/**
 * 动态数据源实体，继承 AbstractRoutingDataSource【抽象路由数据源类】，重写方法设置切换的数据源的key
 *
 * @author szj
 * @since 2021-03-21 16:26
 */
public class DynamicDataSource extends AbstractRoutingDataSource {

    @Override
    protected Object determineCurrentLookupKey() {
        return DataSourceHolder.getKey();
    }

    /**
     * 带参构造，用于设置 默认数据源 defaultTargetDataSource 及 数据源Map targetDataSources
     *
     * @param defaultTargetDataSource 默认数据源
     * @param targetDataSources       数据源Map
     *                                |-Type.USER  : userDataSource
     *                                |-Type.ORDER : orderDataSource
     * @return com.atguigu.dynamic.aspect.DynamicDataSource
     * @author szj
     * @since 2021/3/22 12:00
     */
    public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources) {
        // 默认的数据源，可以作为主数据源
        super.setDefaultTargetDataSource(defaultTargetDataSource);
        // 目标数据源
        super.setTargetDataSources(targetDataSources);
        // 执行afterPropertiesSet方法，完成数据源属性的设置
        super.afterPropertiesSet();
    }
}
